只要看語法的話可以直接拉到文末 (●°u°●)
前一篇在部署 pod 的時候,有使用到 kubectl
指令,它是操作 Kubernetes
時必不可少的 CLI 工具,用來管理和操作 Kubernetes Cluster 中的應用程式、資源和服務。(基本上就是操作所有東西)
kubectl
的主要功能包含:
基本的命令結構是:
kubectl [command] [TYPE] [NAME] [flags]
command
: 要執行的操作,如:create、get、deleteTYPE
: 資源類型,如:pods、services、deploymentsNAME
: 資源名稱flags
: 其他參數指令又分為 命令式(Imperative) 和 宣告式 (Declarative)
直接告訴 Kubernetes 執行特定操作
create、expose 都是命令式語句
kubectl create pod <pod-name> --image=<image>
適用情境:適合快速測試和除錯
只定義執行結果,由 Kubernetes 自行決定如何達到該狀態
apply 就屬宣告語句
kubeclt apply -f <yamlfile>
適用情境:複雜配置、需保留異動紀錄和長期維護
先前有提過 Kubernets 使用 kube-apiserver
作為唯一的溝通媒介,kubectl
也不例外,當使用 kubectl 指令時,背後的運作是這樣的:
以 kubectl get pods 指令為說明範例
kubectl get pods
命令kubectl
接收後解析指令,並構建 HTTP GET 請求 /api/v1/namespaces/default/pods
kube-apiserver
kube-apiserver
驗證請求
kube-apiserver
會直接從 ETCD 中讀取 pod 資訊kubectl
kubectl
格式化後顯示給使用者為什麼不直接向 Worker Node 請求 pod 資訊?
- 一致性:所有的執行資訊都保存在
ETCD
,可以保證資訊的一致性和可靠性- 效率:直接從
ETCD
讀取比查詢多個節點快多了- 安全性:減少了對 Worker Nodes 的直接訪問,提高安全性
kubectl get <資源>
# 實例
kubectl get pods
kubectl get services
kubectl get deployments
kubectl create -f <yaml-file>
# 範例
kubectl create -f demo-pod.yaml
kubectl apply -f <yaml-file>
# 範例
kubectl apply -f my-config.yaml
kubectl delete <資源類別> <資源名稱>
# 範例
kubectl delete demo-pod
kubectl logs <資源名稱>
# 範例
kubectl logs demo-pod
kubectl describe <資源類別> <資源名稱>
# 範例
kubectl describe pod demo-pod
雖說 kubectl
背後的運行模式不是使用這個工具的必要知識,不過在實務應用上,多知道一些運作原理常常可以在除錯的時候少繞一些彎路。
如果覺得 kubec-t-l 很難唸的話,可以唸成 kube-control